package vista;

import modelo.Disponibilidad;
import modelo.Empleado;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.aop.windows.TransactionalDialog;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.layout.VerticalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;

import applicationModels.CreacionEdicionEmpleados;
import applicationModels.EditarDisponibilidad;

public class CrearEditarEmpleadoWindow extends TransactionalDialog<CreacionEdicionEmpleados>{

	private static final long serialVersionUID = 1L;

	public CrearEditarEmpleadoWindow(EmpleadosWindow parent, Empleado empleado) {
		super(parent,new CreacionEdicionEmpleados(empleado));
		this.setTitle("Editar empleado");
		this.setTaskDescription("");
	}

	@Override
	protected void addActions(Panel actionsPanel) {
		new Button(actionsPanel)
		.setCaption("Aceptar")
		.onClick(new MessageSend(this, "accept"))
		.setAsDefault()
		.disableOnError();

		new Button(actionsPanel)
			.setCaption("Cancelar")
			.onClick(new MessageSend(this, "cancel"));		
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		Panel datosEmpleado = new Panel(mainPanel);
		this.createDatosEmpleadoPanel(datosEmpleado);
		
		Panel dispoTable = new Panel(mainPanel);
		dispoTable.setLayout(new VerticalLayout());
		this.createDisponibilidadesTable(dispoTable);
		this.createDisponibilidadesActions(dispoTable);
	}
	
	private void createDatosEmpleadoPanel(Panel panel){
		panel.setLayout(new ColumnLayout(2));
		
		new Label(panel).setText("Nombre");
		new TextBox(panel).bindValueToProperty("empleado.nombre");

		new Label(panel).setText("Apellido");
		new TextBox(panel).bindValueToProperty("empleado.apellido");
		
		new Label(panel).setText("Legajo");
		new Label(panel).setText(String.valueOf(this.getModelObject().getEmpleado().getLegajo()));
	}
	
	private void createDisponibilidadesTable(Panel panel) {
		new Label(panel).setText("Disponibilidad");
		
		Table<Disponibilidad> tabla = new Table<Disponibilidad>(panel, Disponibilidad.class);
		tabla.setHeigth(160);
		tabla.setWidth(200);

		tabla.bindItemsToProperty("disponibilidades");
		tabla.bindValueToProperty("disponibilidadSeleccionada");

		new Column<Disponibilidad>(tabla).setTitle("Dias")
				.setFixedSize(100)
				.bindContentsToProperty("dia");

		new Column<Disponibilidad>(tabla).setTitle("Horario")
				.setFixedSize(100)
				.bindContentsToTransformer(new HorarioDisponibilidadToStringTransformer());
	}
	
	private void createDisponibilidadesActions(Panel panel) {
		Panel dispoTableActions=new Panel(panel);
		dispoTableActions.setLayout(new HorizontalLayout());
		
		Button editar=new Button(dispoTableActions);
		editar.setCaption("Editar");
		editar.onClick(new MessageSend(this, "editarDisponibilidad"));
		
		NotNullObservable elementSelected = new NotNullObservable("disponibilidadSeleccionada");
		editar.bindEnabled(elementSelected);
	}
	
	@Override
	public void accept(){
		this.getModelObject().guardarEmpleado();
		super.accept();
	}

	public void editarDisponibilidad(){
		EditarDisponibilidadWindow editarDispoWindow=new EditarDisponibilidadWindow(this, new EditarDisponibilidad(this.getModelObject().getDisponibilidadSeleccionada()));
		editarDispoWindow.onAccept(new MessageSend(this.getModelObject(), "refreshDisponibilidades"));
		editarDispoWindow.open();
	}
	
}
